import config from "../../config";
import axios from "axios";

const baseUrl = process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro

/**
 * 用于请求的工具类
 */
class HttpRequest {
    constructor(baseUrl) {
        this.baseUrl = baseUrl
    }

    // 定义axios相关配置
    getInsideConfig() {
        return {
            // `baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
            baseUrl: this.baseUrl,
            // `headers` 是即将被发送的自定义请求头
            headers: {}
        }
    }

    // 在请求或响应被 then 或 catch 处理前拦截它们
    interceptors(axios) {
        // 添加请求拦截器
        axios.interceptors.request.use(
            config => {
                // 在发送请求之前做些什么
                return config
            },
            error => {
                return Promise.reject(error)
            }
        )
        // 添加响应拦截器
        axios.interceptors.response.use(
            response => {
                // 对响应数据做点什么
                return response
            },
            error => {
                return Promise.reject(error)
            }
        )
    }

    // 生成axios实例并应用传入配置和默认配置
    request(options) {
        const instance = axios.create(); /*创建axios实例*/
        options = {...this.getInsideConfig(), ...options} /*配置信息*/
        this.interceptors(instance) /*添加拦截器*/
        return instance(options)   /*应用配置*/
    }
}

export default new HttpRequest(baseUrl)
